package com.Shuang.Test1;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;


//目前有100名囚犯，每个囚犯的编号是1-200之间的随机数。
// 现在要求依次随机生成100名囚犯的编号（要求这些囚犯的编号是不能重复的），
// 然后让他们依次站成一排。(注：位置是从1开始计数的)，接下来，国王命令手下先干掉全部奇数位置处的人。
// 剩下的人，又从新按位置1开始，再次干掉全部奇数位置处的人，依此类推，直到最后剩下一个人为止，剩下的这个人为幸存者。
public class Test {
    public static void main(String[] args) {
        //完成幸存者案例
        //生成一百个囚犯并占位
        List<People> peoples = new ArrayList<>();
        for (int i = 1; i <= 100; i++) {
            People people = new People();
            people.setLocation(i);
            peoples.add(people);
        }
        //随机1-200个编号给每个囚犯（不重复）
        Random r = new Random();
        for (int i = 0; i < peoples.size(); i++) {
            People people = peoples.get(i);
            while (true) {
                int number = r.nextInt(1,201);
                if(number == people.getNumber()){

                }else{
                    people.setNumber(number);
                    break;
                }
            }
        }
        System.out.println("囚犯占位：" + peoples);
        //把奇数位置的人干掉直到剩一个人为止：其实就是留下偶数位置的人
        //创建一个新集合，把偶数位置的人放到新集合里
        while (peoples.size() > 1){
            List<People> newPeoples = new ArrayList<>();
            for (int i = 1; i < peoples.size(); i+=2) {
                People people = peoples.get(i);
                newPeoples.add(people);
            }
            peoples = newPeoples;
        }

        System.out.println("幸存者:" + peoples);
    }
}
